package org.jaaksi.kottlindemo.test

import org.jaaksi.kottlindemo.model.Person

class TestField {
  // 幕后字段
  private var size = 0 // 这个值不可能<0
    set(value) {
      if (value < 0) field = 0
    }

  private val hasMore: Boolean get() = size > 0
  private val hasMor2e: Boolean
    get() {
      return size > 0
    }

  private var date: String? = null

  // fixme 幕后属性：有时候有这种需求，我们希望一个属性：对外表现为只读，对内表现为可读可写，我们将这个属性成为幕后属性。
  private var _table: Map<String, Int>? = null
  val table: Map<String, Int>
    get() {
      if (_table == null) {
        _table = HashMap() // 类型参数已推断出
      }
      return _table ?: throw AssertionError("Set to null by another thread")
    }

  private lateinit var person2: Person
  private fun fun1() {
    if (::person2.isInitialized) { // 要检测一个 lateinit var 是否已经初始化过
    }
  }
}